//
//  DBManager.m
//  MilitaryDemo
//
//  Created by qianfeng01 on 15-7-10.
//  Copyright (c) 2015年 qianfeng01. All rights reserved.
//

#import "DBManager.h"
#import "DetailModel.h"
@implementation DBManager
{
    //数据库对象
    FMDatabase *_database;
}

+(DBManager *)sharedManager
{
    static DBManager *manager=nil;
    @synchronized(self) {//同步 执行 防止多线程操作
        if (manager == nil) {
            manager = [[self alloc] init];
        }
    }
    return manager;

}
- (id)init {
    if (self = [super init]) {
        //1.获取数据库文件app.db的路径
        NSString *filePath = [self getFileFullPathWithFileName:@"app.db"];
        //NSLog(@"filePath:>%@",filePath);
        //2.创建database
        _database = [[FMDatabase alloc] initWithPath:filePath];
        //3.open
        //第一次 数据库文件如果不存在那么 会创建并且打开
        //如果存在 那么直接打开
        if ([_database open]) {
            //创建表 不存在 则创建
            [self creatTable];
        }else {
            NSLog(@"database open failed:%@",_database.lastErrorMessage);
        }
    }
    return self;
}
- (void)creatTable {
    //字段: 应用名 应用id 当前价格 最后价格 icon地址 记录类型 价格类型
    NSString *sql = @"create table if not exists appInfo(serial integer  Primary Key Autoincrement,id Varchar(1024),title Varchar(1024),shareImg Varchar(1024))";
    //创建表 如果不存在则创建新的表
    BOOL isSuccees = [_database executeUpdate:sql];
    if (!isSuccees) {
        NSLog(@"creatTable error:%@",_database.lastErrorMessage);
    }
}

//获取文件在沙盒中的 Documents中的路径
- (NSString *)getFileFullPathWithFileName:(NSString *)fileName {
    NSString *docPath = [NSHomeDirectory() stringByAppendingFormat:@"/Documents"];
    NSFileManager *fm = [NSFileManager defaultManager];
    if ([fm fileExistsAtPath:docPath]) {
        //文件的全路径
        return [docPath stringByAppendingFormat:@"/%@",fileName];
    }else {
        //如果不存在可以创建一个新的
        NSLog(@"Documents不存在");
        return nil;
    }
}
- (void)insertModel:(id)model{
    DetailModel *appModel = (DetailModel *)model;
    
    if ([self isExistAppForAppId:appModel.id]) {
        NSLog(@"this app has  recorded");
        return;
    }
     NSString *sql = @"insert into appInfo(id ,title ,shareImg) values (?,?,?)";
    BOOL isSuccess = [_database executeUpdate:sql,appModel.id,appModel.title,appModel.shareImg];
    if (!isSuccess) {
        NSLog(@"insert error:%@",_database.lastErrorMessage);
    }
}
//删除指定的应用数据 根据指定的类型
- (void)deleteModelForAppId:(NSString *)appId  {
    NSString *sql = @"delete from appInfo where id = ?";
    BOOL isSuccess = [_database executeUpdate:sql,appId];
    if (!isSuccess) {
        NSLog(@"delete error:%@",_database.lastErrorMessage);
    }
}
- (NSArray *)readModels{
    
    NSString *sql = @"select * from appInfo";
    FMResultSet * rs = [_database executeQuery:sql];
    
    NSMutableArray *arr = [NSMutableArray array];
    //遍历集合
    while ([rs next]) {
        //把查询之后结果 放在model
        DetailModel *appModel = [[DetailModel alloc] init];
        appModel.id = [rs stringForColumn:@"id"];
        appModel.title = [rs stringForColumn:@"title"];
        appModel.shareImg = [rs stringForColumn:@"shareImg"];
        //放入数组
        [arr addObject:appModel];
    }
    return arr;
}
//根据指定的类型 返回 这条记录在数据库中是否存在
- (BOOL)isExistAppForAppId:(NSString *)appId {
    NSString *sql = @"select * from appInfo where id = ?";
    FMResultSet *rs = [_database executeQuery:sql,appId];
    if ([rs next]) {//查看是否存在 下条记录 如果存在 肯定 数据库中有记录
        return YES;
    }else{
        return NO;
    }
}
//根据 指定的记录类型  返回 记录的条数
- (NSInteger)getCounts {
    NSString *sql = @"select count(*) from appInfo ";
    FMResultSet *rs = [_database executeQuery:sql];
    NSInteger count = 0;
    while ([rs next]) {
        //查找 指定类型的记录条数
        count = [[rs stringForColumnIndex:0] integerValue];
    }
    return count;
}

@end
